package tree.递归;

import po.TreeNode;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName N二叉树中第二小的节点671.java
 * @Description https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree/
 * @createTime 2021年07月02日 19:51:00
 */
public class N二叉树中第二小的节点671 {

    public int findSecondMinimumValue(TreeNode root) {
        return find(root,root.val);
    }

    private int find(TreeNode node, int val) {
        //如果节点为null，则返回-1，表示为最小值
        if (node == null) {
            return -1;
        }
        //比较当前节点和最大的值,如果比最大值还要大， 直接返回
        if (node.val > val) {
            return node.val;
        }
        //分别获取左右子树的节点的最大值
        int left = find(node.left, val);
        int right = find(node.right, val);
        //如果左右节点逗比最大值还大，那就在二者里面去小的一个
        if (left > val && right > val) {
            return Math.min(left,right);
        }
        //如果不比val大，说明都是小鱼或者等于的，所以去较大的值a
        return Math.max(left,right);
    }

}
